結束了惱人的環境安裝,但我們還沒有要開始Spring Boot 的實作,因為在開始學習一項技術之前,我們一定要先了解它的由來、開發目的、理念以及優缺點,這樣才可以知道為什麼要使用它以及它與其他工具的差異。
介紹了Spring Boot 之前先來介紹它的前身Spring,Spring 是一個輕量級的Java 開發框架,主要依存於SSH 框架,即Structs + Spring + Hibernate,定位很明確,Struts 主要負責view 層的顯示,Spring 利用IOC 和AOP 來處理業務,Hibernate 則是資料的持久化到資料庫。
而Spring 為了開發Java 應用程式提供了全面的基礎架構支援。它具有以下幾個特點。
非侵入式
所謂非侵入式是指Spring 框架的API 不會出現在業務邏輯上,也就是說業務邏輯應該是乾淨的,不會出現與業務邏輯無關的程式。針對應用而言,這樣才能將業務邏輯從目前應用中剝離出來,進一步在其他的應用中實現重用;針對框架而言,由於業務邏輯中沒有Spring 的API,所以業務邏輯也可以從Spring 框架快速移植到其他框架。
容器
Spring 提供了容器功能,容器可以管理物件的生命週期以及物件與物件之間的依賴關係,可以寫一個設定檔定義物件的名稱、是否單例以及設定與其他物件的依賴關係,當容器啟動後,這些物件就被建立好實體了,可以直接注入使用。
IOC 控制反轉
控制反轉是一種程式設計的方式,即依賴關係的轉移,如果以前都是依賴於實現,那麼現在反轉為依賴於抽象,核心思想就在於面對介面程式設計。
依賴注入
物件與物件之間依賴關係的實現,包括介面注入,建構注入等。
AOP 剖面程式設計
將記錄檔、安全、交易管理等功能想像成一個剖面,原先這些功能都是直接寫在業務邏輯中,但它有兩個缺點,首先就是業務邏輯不乾淨,其次就是這些功能被很多業務邏輯重複使用,不能做到重用。AOP 就解決了上述問題,可以把這些功能從業務邏輯中撥離出來形成一個剖面,可以實現重用。
Spring Boot 的設計目的是為了解決Spring 各版本設定工作過於繁重的問題,簡化初始架設流程、降低開發難度,使開發人員只需要專注在應用程式的開發,而無須過多關注XML 的配置。
Spring Boot 的設計理念為約定大於配置(Convention Over Configuration),為此提供了很多已經整合好的依賴套件,以便開發人員在開發應用程式時能做到不用或者很少的Spring 配置就可以讓專案快速執行,這樣的好處就是開發人員可以把更多的精力放在業務邏輯的開發上。
使用簡單
Spring Boot 可使用註釋的方式實現類別的定義與功能的開發,即可無程式產生和XML 設定。而且Spring Boot 會根據類別路徑中的JAR 包,為JAR 包中的類別自動配置Bean,這樣可以大量減少我們要使用的配置,當然Spring Boot 只考慮大部分開發狀況,若實際開發中我們需要配置Bean 也可以自定義配置。
配置簡單
Spring Boot 為了簡化Maven 配置設定提供了大量的Starter,開發人員只要能配置好相對應組件參數,Spring Boot 就會自動配置,讓開發人員能快速搭建依賴於Spring 組件的Java 項目,例如,Spring Boot 為了幫助開發人員快速啟動一個web 容器,提供了spring-boot-starter-web 依賴,只需要在pom.xml 檔案中新增web 依賴即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
而點選進入web 依賴後可以發現,spring-boot-starter-web 已經包含了多個依賴,包括在Spring 中需要匯入的依賴,如下圖展示一部分依賴。
<!-- 忽略其他依賴 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.0.7.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.7.RELEASE</version>
<scope>compile</scope>
</dependency>
部署簡單
Spring Boot 內嵌了各種Servlet 容器、Tomcat、Jetty 等,不再需要打包成war 包部署到容器中,我們只需要將專案打包成Jar 包,所有的依賴包都在一個Jar 包內,使用java -jar xxx.jar 即可啟動專案。
監控簡單
Spring Boot 提供了spring-boot-starter-actuator 依賴,它是一套監控、管理應用程式狀態的功能模組,包含監控應用程式的執行緒資訊、記憶體資訊等。
雖然Spring Boot 上手很容易,大部分東西都自動配置,簡化了許多架設流程,但也因此需要非常了解Spring Boot 的核心技術原理,需要對配置訊息非常熟悉,不然一旦遇到問題就很棘手,要找問題也不是很容易。
Spring Cloud 是基於Spring Boot 的一整套實現微服務的框架,它是一套分散式服務治理架構,本身不提供實際功能性的操作,只專注於服務之間的通訊、熔斷和監控等,因此需要很多原件來共同支援一套功能。
從上述介紹可以看出,Spring Boot 其實是依賴於Spring 的,並不是一個全新的架構,Spring Boot 就是Spring 的自動化,而Spring Cloud 透過依賴Spring Boot 來建置微服務應用。
Spring Framework - 维基百科,自由的百科全书
Springboot是什麼?Springboot詳解!入門介紹
大師你好,本人是新手,想請問一下,spring boot 和spring boot2 請問優先先學哪一個?,我是想說既然有2了,那是不乾脆學2比較好?
建議先學spring boot 2,程式語言和框架的迭代通常都是新增一些支援或細節的改動,本質上不會有太大的差異,但學完之後再去了解兩者之間的差異,不只是面試會考,在公司會有新專案跟舊專案,經手的專案不可能都是新的版本,一定還是要接前人留下來的坑。
謝謝大師解答